package com.itzhouwei.commerce.thread.core.demo3;

/**
 * 线程优先级
 * @description:线程优先级
 * @author：zw，微信公共号：yingshengzw
 * @date: 2021/8/28
 * @Copyright：公众号：搬砖暗夜码农 | 博客：https://itzhouwei.com - 沉淀、学习、分享、成长，让自己和他人都能有所收获！
 */
public class ThreadPriorityDemo {

    static class TackDemo implements Runnable{

        private int j;

        public TackDemo(int j){
            this.j=j;
        }

        @Override
        public void run() {
            for (int i = 0; i <6 ; i++) {
                System.out.println("线程名字 "+Thread.currentThread().getName()+"  "+j);
            }
        }
    }

    /***
     * 注意 不过“优先级”这个参数通常并不是那么地“靠谱”，理论上说线程的优先级越高，分配到时间片的几率也就越高
     * ，但是在实际运行过程中却并非如此，优先级只能作为一个参考数值，而且具体的线程优先级还和操作系统有关，
     * 所以大家在编码中如果使用到了“优先级”的设置，请不要强依赖于它。
     * @param args
     * @throws InterruptedException
     */
    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(new TackDemo(9), "线程1");
        //优先级只能作为一个参考数值，而且具体的线程优先级还和操作系统有关
        thread.setPriority(1);

        Thread thread2 = new Thread(new TackDemo(2), "线程1");
        thread2.setPriority(2);

        Thread thread3 = new Thread(new TackDemo(3),"task-3");
        thread3.setPriority(3);


        thread.start();
        thread2.start();
        thread3.start();

        Thread.sleep(2500);
    }

    /****
     * 并行 ， 通常是指同一时间内有多个进程同时运作，这种情况通常发生在多核心 CPU 或者多个 CPU 共同计算的场景中。
     * 并发 ， 这类场景通常是单个核心的单 CPU 在非常快速地切换多个线程任务，从而让用户感觉同一时刻似乎有多个程序在同时执行，
     * 但是实际上每一时刻只能有一个程序在 CPU 上运作。
     * 在互联网场景中，并发场景主要会在一些业务系统中出现地比较多，例如下单接口、秒杀接口等等，
     * 而并行的场景更多会发生在一些大数据部门中，
     * 例如多台机器一同进行数据清洗之类的。
     *
     * 最后，我们常说的并发是针对单核 CPU 而言，它指的是 CPU 交替执行不同任务的能力。
     * 而并行这个概念更多是针对多核 CPU 或者多个CPU而言，它指的是多个核心同时执行多个任务的能力。
     */
}
